function trimmInnerLatexSpaces(text) {
    // 使用正则表达式匹配所有 $...$ 结构
    // \$ 匹配美元符号本身
    // (.*?) 捕获两个美元符号之间的任何字符，? 表示非贪婪匹配，以正确处理一行中多个公式的情况
    // g 表示全局匹配，即替换所有找到的实例
    return text.replace(/\$(.*?)\$/g, (match, content) => {
        // content 是捕获到的美元符号之间的内容
        // content.trim() 会移除 content 字符串两端的空白字符
        return `$${content.trim()}$`;
    });
}

// --- 示例使用 ---

// 你的示例文本
const problematicText = "这个公式渲染会出错$ X = x_i $这种行内的就不能有空格.现在两个$一个后面一个前面有个空格,请用js调整一下";
const correctedText = trimmInnerLatexSpaces(problematicText);
console.log("修正前:", problematicText);
console.log("修正后:", correctedText);
// 预期输出: "这个公式渲染会出错$X = x_i$这种行内的就不能有空格.现在两个$一个后面一个前面有个空格,请用js调整一下"

// 应用于你提供的 Markdown 文本块
const markdownInput = `
### 边缘分布的公式辨析

- **行求和**：反映固定 $ X = x_i $ 时，$ Y $ 的所有可能取值对 $ X $ 的贡献。
- **列求和**：反映固定 $ Y = y_j $ 时，$ X $ 的所有可能取值对 $ Y $ 的贡献。
- **独立性分析**：边缘分布是研究单一变量特性的基础，也是条件分布和独立性检验的前提。
`;

const correctedMarkdown = trimmInnerLatexSpaces(markdownInput);
console.log("\nMarkdown 修正前:\n", markdownInput);
console.log("Markdown 修正后:\n", correctedMarkdown);
/*
Markdown 修正后:

### 边缘分布的公式辨析

- **行求和**：反映固定 $X = x_i$ 时，$ Y $ 的所有可能取值对 $ X $ 的贡献。
- **列求和**：反映固定 $Y = y_j$ 时，$ X $ 的所有可能取值对 $ Y $ 的贡献。
- **独立性分析**：边缘分布是研究单一变量特性的基础，也是条件分布和独立性检验的前提。
*/

// 其他一些测试用例
const testCases = [
    "公式 $   a + b   $ 应该被修正。",
    "公式 $c$ 没有前导或尾随空格。",
    "多个公式：$ e^{i\pi} + 1 = 0 $ 和 $ \int x dx $ 还有 $  test  $."
];

testCases.forEach(test => {
    console.log(`\n测试: "${test}"`);
    console.log(`修正后: "${trimmInnerLatexSpaces(test)}"`);
});
